// src/services/courseService.js
import api from './api'; // 假设你的 api 实例已经正确配置

const courseService = {
  // 获取所有课程
  getCourses() {
    return api.get('/courses');
  },

  // 获取单个课程
  getCourseById(id) {
    return api.get(`/courses/${id}`);
  },

  // 创建课程
  createCourse(courseData) {
    // 确保这里的 courseData 结构与后端 Course 实体匹配
    return api.post('/courses', courseData);
  },

  // 更新课程
  updateCourse(id, courseData) {
    // 确保这里的 courseData 结构与后端 Course 实体匹配
    return api.put(`/courses/${id}`, courseData);
  },

  // 删除课程
  deleteCourse(id) {
    // 后端 @DeleteMapping("/{id}") 应该返回一个 ResponseEntity，
    // 这里我们期望它返回一个表示成功或失败的 JSON 对象
    return api.delete(`/courses/${id}`);
  },

  // 获取所有教师 (假定 /users 接口返回用户列表，包含教师信息)
  getTeachers() {
    return api.get('/users');
  },

  // === 以下是与课程资源相关的修改 ===

  // 获取课程资源列表
  getCourseResources(params = {}) {
    return api.get('/api/resources', { params: params });
  },

  // 上传课程资源
  uploadCourseResource(file) {
    const formData = new FormData();
    formData.append('file', file);

    return api.post('/api/resources/upload', formData, {
      headers: {
        'Content-Type': 'multipart/form-data',
      },
    });
  },

  /**
   * 下载课程资源文件 (通过后端代理)
   * @param {number} resourceId 要下载的资源ID
   * @returns {Promise<AxiosResponse<Blob>>} 包含文件 Blob 数据的 Axios 响应
   */
  downloadCourseResource(resourceId) { // <--- 新增的下载方法，并统一命名为 downloadCourseResource
    return api.get(`/api/resources/download/${resourceId}`, {
      responseType: 'blob' // 告诉 axios 期望一个二进制响应
    });
  },

  // 更新课程资源 (如果需要修改资源的标题等元数据，而不是文件本身)
  updateCourseResource(resourceId, resourceData) {
    return api.put(`/api/resources/${resourceId}`, resourceData);
  },

  // 删除课程资源
  deleteCourseResource(resourceId) {
    return api.delete(`/api/resources/${resourceId}`);
  },

  // 注意：getDownloadUrl 在这里不再作为导出函数，因为我们推荐使用 downloadCourseResource 进行认证下载。
  // 如果需要用于非认证的预览或直接链接，可以作为 courseService 的私有辅助方法，
  // 或者在组件中直接构建 URL（但请注意其认证局限性）。
};

export default courseService; // 确保导出 courseService 对象